// 该文件帮助我们打包 packages下的模块，并最终打包出 js文件



// node dev.js 要打包的模块名称 -f 打包的格式 

// -f 是 format 格式化的意思
// 打包的格式有：esm cjs iife


// node dev.js (要打包的模块名称 -f 打包的格式 ) ===> argv
import minimist from 'minimist';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
import { createRequire } from 'module';
import esbuild from 'esbuild';

const args = minimist(process.argv.slice(2)) // 获取命令行参数
const __filename = fileURLToPath(import.meta.url) // 获取当前文件的绝对路径,但是以 file: 开头，需要进行二次处理
const __dirname = dirname(__filename) // 获取当前文件的目录路径
const require = createRequire(import.meta.url);
// { _: [ 'reactivity' ], f: 'esm' }
const target = args._[0] || "reactivity"// 要打包的模块名称
const format = args.f || "iife" // 打包的格式

// console.log(target, format)
// console.log(__dirname, __filename)

// 入口文件，根据命令行提供的路径，来进行解析
const entry = resolve(__dirname, `../packages/${target}/src/index.ts`)
const pkg = require(`../packages/${target}/package.json`)

// 根据需要进行打包
esbuild.context({
    entryPoints: [entry], // 入口
    outfile: resolve(__dirname, `../packages/${target}/dist/${target}.js`), // 出口
    bundle: true, // reactivity -> shared 会打包到一起
    platform: 'browser', // 浏览器环境
    sourcemap: true, // 可以调试源代码
    format, // cjs(require) esm(import/export) iife(立即执行函数)
    globalName: pkg.buildOptions?.name, // 全局变量名称
}).then((ctx) => {
    console.log("start dev")

    return ctx.watch() // 监控入口文件持续打包
})


